<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        /*
            理解：什么是闭包？
                1.密闭的容器，类似于set，map容器，存储数据的
                2.闭包是一个对象，存放数据的格式：key：value
            形成的条件：
                1.函数嵌套
                2.内部函数引用外部函数的局部变量
            闭包的优点
                延迟外部函数局部变量的生命周期
            闭包的缺点
                容易造成内存泄漏
            注意点：
                1.合理的使用闭包
                2.用完闭包要即使清除(销毁)

            function fun(){
                var count=0;
                return function(){
                    count++;
                    console.log(count);
                }
            }
            var fun2=fun();
            fun2();//1
            fun2();//2

        */

       /*
            说说他们的输出情况
       */
      
       function fun(n,o){
            console.log(o);
            return {
                fun:function(m)
                {
                    return fun(m,n);
                }
            }
        }
        var a=fun(0); // 1
        a.fun(1);// 2
        a.fun(2);// 3
        a.fun(3);// 4  输出分别是 undefined 0 0 0 

        var b=fun(0).fun(1).fun(2).fun(3) // undefined 0 1 20

        var c=fun(0).fun(1);//undefined 0 
        c.fun(2);// 1
        c.fun(3);// 1
    </script>
</body>
</html>